/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.compra.managed;

import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sv.com.intesal.clases.LimpiarManaged;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.compra.bean.Ajuste;
import sv.com.intesal.compra.controlador.AjusteControlador;
import sv.com.intesal.compra.controlador.MaterialControlador;
import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author ejerez
 */
@ManagedBean(name = "consultaAjusteManaged")
@ViewScoped
public class ConsultaAjusteManaged implements Serializable {

    private Mensaje m;
    private SessionManaged sm;
    private Boolean flagStep_1;
    private Boolean flagStep_2;

    /*ENCA*/
    private List<Ajuste> encaAjustes;
    private Ajuste selectedEncaAjuste;

    /*DETEA*/
    private Ajuste selectedDetaAjuste;
    private List<Ajuste> detaAjustes;

    public ConsultaAjusteManaged() {
        this.m = new Mensaje();
        this.sm = new SessionManaged();
        this.selectedDetaAjuste = new Ajuste();
        this.selectedEncaAjuste = new Ajuste();

        this.flagStep_1 = true;
        this.flagStep_2 = false;
    }

    public void buscarGrid() {

        try {
            if (sm.validar_rol_usuario("wfrmcon_Ajuste", sm.buscar) == true) {
                AjusteControlador ac = new AjusteControlador();
                this.encaAjustes = ac.getConsulta_EncaAjuste(this.selectedEncaAjuste);
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void anularAjuste() {

        try {
            if (this.validar_anular() == true) {
                if (sm.validar_rol_usuario("wfrmcon_Ajuste", sm.anular) == true) {
                    AjusteControlador ac = new AjusteControlador();
                    if (ac.validarCantidad_AnularAjuste(this.selectedDetaAjuste.getId_aj()) == true) {

                        this.detaAjustes.get(0).setNumero_documento_aj(this.selectedDetaAjuste.getNumero_documento_aj());
                        ac.anularAjuste(this.detaAjustes);
                        LimpiarManaged.limpiar();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    private Boolean validarCantidad() {

        try {
            Boolean value = true;
            if (this.detaAjustes == null) {
                m.messageError("NO HAY MATERIALES");
                value = false;
            } else if (this.detaAjustes.size() > 0) {
                for (int i = 0; i < this.detaAjustes.size(); i++) {
                    if (this.detaAjustes.get(i).getCantidad_d() <= 0) {
                        value = false;
                        m.messageAdvertencia("CANTIDAD DEBE SER MAYOR QUE CERO");
                        break;
                    } else if (this.detaAjustes.get(i).getTipo_d().equals("Salida")) {
                        /*VALIDAR SI EXISTE CANTIDAD SUCIFICIENTE*/
                        MaterialControlador mc = new MaterialControlador();
                        if (mc.validar_cantidad(this.detaAjustes.get(i).getId_dm(), this.detaAjustes.get(i).getCantidad_d()) == false) {
                            value = false;
                            m.messageAdvertencia(m.getIcantidad() + ": " + this.detaAjustes.get(i).getNombre_m());
                        }
                    }
                }
            }
            return value;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
            return false;
        }
    }

    public void modificarAjuste() {

        try {
            if (this.validar_modificar() == true) {
                if (sm.validar_rol_usuario("wfrmcon_Ajuste", sm.modificar) == true) {
                    AjusteControlador ac = new AjusteControlador();
                    ac.modificarAjuste(this.selectedDetaAjuste);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    private Boolean validar_anular() {
        try {
            Boolean var_return = true;

            if (this.selectedDetaAjuste.getEstado_aj().equals("A")) {
                m.messageError("NO PUEDE ANULAR EL REGISTRO YA ESTA ANULADO!");
                var_return = false;
            }
            if (this.selectedDetaAjuste.getId_aj() == null) {
                m.messageFatal("DEBE ELEGIR UN REGISTRO A ANULAR. NO TIENE CODIGO ASIGNADO. ERROR");
                var_return = false;
            }
            if (this.detaAjustes.size() == 0) {
                m.messageFatal("NO HAY MATERIALES PARA ANULAR EL REGISTRO");
                var_return = false;
            }
            return var_return;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
            return false;
        }
    }

    private Boolean validar_modificar() {
        try {
            Boolean var_return = true;

            if (this.selectedDetaAjuste.getEstado_aj().equals("A")) {
                m.messageError("NO PUEDE MODIFICAR EL REGISTRO. YA ESTA ANULADO!");
                var_return = false;
            }
            if (this.selectedDetaAjuste.getId_aj() == null) {
                m.messageFatal("DEBE ELEGIR UN REGISTRO A MODIFICAR. NO TIENE CODIGO ASIGNADO. ERROR");
                var_return = false;
            }
            return var_return;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
            return false;
        }
    }

    public void ocultarFlag_1() {
        try {
            if (this.selectedDetaAjuste == null) {
                m.messageError("DEBE ELEGIR UN REGISTRO PARA CONTINUAR");
            } else if (this.selectedDetaAjuste != null) {
                this.flagStep_1 = false;
                this.flagStep_2 = true;

                AjusteControlador ac = new AjusteControlador();
                this.detaAjustes = ac.getDeta_Ajuste(this.selectedDetaAjuste.getId_aj());
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void ocultarFlag_2() {
        try {
            this.flagStep_1 = true;
            this.flagStep_2 = false;
            //this.detaAjustes = null;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void generarEncaReporte() {
        try {

            if (this.encaAjustes == null) {
                m.messageError("NO HAY REGISTROS EN LA BUSQUEDA");
            } else {
                if (sm.validar_rol_usuario("wfrmcon_Ajuste", sm.reporte) == true) {
                    AjusteControlador ac = new AjusteControlador();
                    ac.generarReporte_Ajuste(this.selectedEncaAjuste);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void generarDetaReporte() {
        try {

            if (this.encaAjustes == null) {
                m.messageError("NO HAY REGISTROS EN LA BUSQUEDA");
            } else if (this.detaAjustes == null) {
                m.messageError("NO HAY MATERIALES EN LA TRANSACCION");
            } else {

                if (sm.validar_rol_usuario("wfrmcon_Ajuste", sm.reporte) == true) {
                    this.selectedEncaAjuste.setId_aj(this.selectedDetaAjuste.getId_aj());

                    AjusteControlador ac = new AjusteControlador();
                    ac.generarReporte_Ajuste(this.selectedEncaAjuste);

                    this.selectedEncaAjuste.setId_aj(null);
                }
            }
        } catch (Exception e) {
            this.selectedEncaAjuste.setId_aj(null);
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }


    /*
    SETTERS AND GETTERS
     */
    public List<Ajuste> getDetaAjustes() {
        return detaAjustes;
    }

    public void setDetaAjustes(List<Ajuste> detaAjustes) {
        this.detaAjustes = detaAjustes;
    }

    public List<Ajuste> getEncaAjustes() {
        return encaAjustes;
    }

    public void setEncaAjustes(List<Ajuste> encaAjustes) {
        this.encaAjustes = encaAjustes;
    }

    public Ajuste getSelectedDetaAjuste() {
        if (selectedDetaAjuste == null) {
            selectedDetaAjuste = new Ajuste();
        }
        return selectedDetaAjuste;
    }

    public void setSelectedDetaAjuste(Ajuste selectedDetaAjuste) {
        this.selectedDetaAjuste = selectedDetaAjuste;
    }

    public Ajuste getSelectedEncaAjuste() {
        if (selectedEncaAjuste == null) {
            selectedEncaAjuste = new Ajuste();
        }
        return selectedEncaAjuste;
    }

    public void setSelectedEncaAjuste(Ajuste selectedEncaAjuste) {
        this.selectedEncaAjuste = selectedEncaAjuste;
    }

    public Boolean getFlagStep_1() {
        return flagStep_1;
    }

    public void setFlagStep_1(Boolean flagStep_1) {
        this.flagStep_1 = flagStep_1;
    }

    public Boolean getFlagStep_2() {
        return flagStep_2;
    }

    public void setFlagStep_2(Boolean flagStep_2) {
        this.flagStep_2 = flagStep_2;
    }
}
